﻿// -------------------------------------------------------------------------
//    @FileName         :    NFPackageUtil.cpp
//    @Author           :    gaoyi
//    @Date             :    24-8-29
//    @Email            :    445267987@qq.com
//    @Module           :    NFPackageUtil
//
// -------------------------------------------------------------------------

// --- 文件总结 ---------------------------------------------------------------
// 本文件实现 NFPackageUtil 类的工具函数：
// 
// - Arrage：整理背包
//   * 获取背包部件
//   * 调用背包页签的整理功能
//   * 构造响应消息返回整理后的格子数据
// 
// - AddExp：添加经验
//   * 支持角色经验（EN_ID_EXP）
//   * 支持宠物经验（EN_ID_PET_EXP）
//   * 填充通知消息
// 
// - AddGuildValue：添加公会值（待实现）
// 
// - SendItemNtf：发送物品通知（待实现）
// ---------------------------------------------------------------------------

#include "NFPackageUtil.h"

#include <NFPackagePart.h>
#include <NFPlayerUtil.h>
#include "NFPlayer.h"
#include "NFPartnerUtil.h"

int NFPackageUtil::Arrage(NFPlayer* pPlayer, int iPage, proto_ff::Proto_CSBagGridArrangeRsp* rsp)
{
    CHECK_NULL(0, pPlayer);
    CHECK_NULL(pPlayer->GetRoleID(), rsp);

    NFPackagePart* pPackage = pPlayer->GetPart<NFPackagePart>(PART_PACKAGE);
    CHECK_NULL(pPlayer->GetRoleID(), pPackage);

    auto pPage = pPackage->Arrage(iPage);
    CHECK_NULL(pPlayer->GetRoleID(), pPage);

    pPage->MakeGridCSData(rsp->mutable_grid_list());
    rsp->set_storage_page(iPage);
    return 0;
}

int NFPackageUtil::AddExp(NFPlayer* pPlayer, uint32_t iExpID, uint32_t iNum, proto_ff::Proto_CSRoleItemNtf* ntf, proto_ff::enItemChangeReason eReason, int iReasonParam)
{
    CHECK_NULL(0, pPlayer);
    int iRetCode = 0;

    uint64_t ullRealAdd = iNum;
    switch (iExpID)
    {
        case proto_ff::EN_ID_EXP:
            NFPlayerUtil::AddExp(pPlayer, iNum, eReason, iReasonParam, &ullRealAdd);
            break;
        case proto_ff::EN_ID_PET_EXP:
            NFPartnerUtil::AddBattlePartnerExp(pPlayer, iNum);
            break;
        default:
            LOGSVR_ERROR("unkown id: " << iExpID);
            return -1;
            break;
    }

    if (iRetCode == 0 && ullRealAdd > 0 && ntf)
    {
        NFGridItem item;
        item.m_stBase.id = iExpID;
        item.m_stBase.value = ullRealAdd;
        NFItemUtil::AddToNtf(&item, ntf->mutable_added_list(), 0);
    }

    return 0;
}

int NFPackageUtil::AddGuildValue(NFPlayer* pPlayer, uint32_t iID, int iNum, uint64_t iTotalNum)
{
    return 0;
}



int NFPackageUtil::SendItemNtf(NFPlayer* pPlayer, proto_ff::Proto_CSRsp& rsp)
{
    return 0;
}
